package com.maint.m.utils

import java.io.Serializable

/**
 * 全局数据单例，用来存储应用内的数据和状态
 */
object AppDataManager {

//    binding.tvDeviceName.text = DeviceLinkerManager.mBluetoothDevice?.name
//    binding.tvDeviceSn.text = SystemGlobalConstant.deviceId
//    binding.tvDeviceSystem.text = SystemGlobalConstant.version
//    Log.d("gzt",SystemGlobalConstant.deviceId)
//
//    Log.d("gzt",SystemGlobalConstant.version)

    // 是否已连接 P2P
    var isP2pConnected: Boolean = false

    // 是否已连接普通 蓝牙
    var isBtConnect: Boolean = false

    // 当前连接的蓝牙 设备名
    var mBluetoothDeviceName: String? = null
    //系统版本
    var ioVersion: String? = null
    var deviceId: String? = null

    // 缓存的数据（比如临时存放消息列表）
    val messageCache: MutableList<String> = mutableListOf()
    
    // 操作项缓存，使用Map存储不同类型的操作项数据
    // 使用String作为键，Serializable作为值以支持不同类型的数据
    private val operationCache: MutableMap<String, Serializable> = mutableMapOf()
    
    /**
     * 保存操作项到缓存
     * @param key 缓存的键，用于标识不同的操作项
     * @param value 要缓存的操作项数据，必须是可序列化的
     */
    fun saveOperation(key: String, value: Serializable) {
        operationCache[key] = value
    }
    
    /**
     * 从缓存中获取操作项
     * 
     * @param key 缓存的键
     * @param T 期望的返回类型
     * @return 缓存的操作项数据，如果不存在则返回null
     */
    @Suppress("UNCHECKED_CAST")
    fun <T : Serializable> getOperation(key: String): T? {
        return operationCache[key] as? T
    }
    
    /**
     * 检查是否存在指定键的操作项缓存
     * @param key 缓存的键
     * @return 如果缓存存在则返回true，否则返回false
     */
    fun hasOperation(key: String): Boolean {
        return operationCache.containsKey(key)
    }
    
    /**
     * 移除指定键的操作项缓存
     * @param key 缓存的键
     */
    fun removeOperation(key: String) {
        operationCache.remove(key)
    }
    
    /**
     * 清空所有操作项缓存
     */
    fun clearOperations() {
        operationCache.clear()
    }

    // 统一清理方法
    fun clearAll() {
        isP2pConnected = false
        isBtConnect = false
        ioVersion = null
        mBluetoothDeviceName=null
        deviceId=null
        messageCache.clear()
        clearOperations()
    }
}
